<?xml version = '1.0' encoding = 'UTF-8'?>
<HBRRepo><variables><variable name="OQP_HistoricalYears" type="members" usage="const" id="1" product="Planning"><property name="application">SalesPln</property><property name="dimension">Years</property><property name="dimensionInputMode">name</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_HIST_YRS</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable><variable name="OQP_Scenario" type="member" usage="const" id="3" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Scenario</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_SCENARIO</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable><variable name="OQP_Version" type="member" usage="const" id="2" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Version</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_VERSION</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable></variables><rulesets/><rules><rule id="1" name="OQP_Process Data Load" product="Planning"><property name="application">SalesPln</property><property name="plantype">OEP_QTP</property><property name="seeded">true</property><variable_references><variable_reference name="OQP_HistoricalYears" id="1"><property name="application">SalesPln</property><property name="hidden">false</property><property name="rule_name">OQP_Process Data Load</property><property name="seq">1</property><property name="type">4</property><property name="useAsOverrideValue">false</property><property name="validation_value">FY17</property></variable_reference><variable_reference name="OQP_Scenario" id="3"><property name="application">SalesPln</property><property name="hidden">false</property><property name="rule_name">OQP_Process Data Load</property><property name="seq">2</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">"OEP_Plan"</property></variable_reference><variable_reference name="OQP_Version" id="2"><property name="application">SalesPln</property><property name="hidden">false</property><property name="rule_name">OQP_Process Data Load</property><property name="seq">3</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">"OEP_Working"</property></variable_reference></variable_references><script type="groovy">				/*RTPS:{OQP_HistoricalYears}{OQP_Version} {OQP_Scenario} */
			   /*PURPOSE: This rule copies Actuals Actual scenario to plan scenario,  Aggregate numbers across all scenarios and versions then calculate seasonality  percentage of previous year */				
                List&lt;String> CustomDimensions=[];
				List&lt;String> CustomRelDimensions=[];
				String strCrossDim = "";
                String EntityDim="";
                
                int iCnt;
				List&lt;String>  HistoricalYears=rtps.OQP_HistoricalYears.members.name;
                String Scenario=rtps.OQP_Scenario.member.name;
                String Version=rtps.OQP_Version.member.name;
				try
				{
                boolean isUnitsModel= false
                boolean isCurrencyApp= false
                /*Fetch scenario dimension user variable value*/
				Application app=operation.getApplication();
				Cube qtp=app.getCube("OEP_QTP"); 
				java.util.List&lt;Dimension> dimlist=app.getDimensions(qtp);
                /*Fetch scenario dimension user variable value*/
				
               	
                /*Fetchs dimension list and generates cross dimension string for seasonality calculations*/
				for (Dimension dim : dimlist) 
				{
					DimensionType dType=dim.getType();    
					if ((dType==DimensionType.CUSTOM))
					{
					   	 strCrossDim= strCrossDim + "\"OEP_All "+ dim.getName()+"\"->"
						 CustomRelDimensions.add('''@Relative("OEP_All '''+dim.getName()+'''",0)''');							 	
						 CustomDimensions.add(dim.getName());
					}
                    if (dType==DimensionType.CURRENCY)
                    {
						isCurrencyApp=true;
                        			
					}
                    if (dType==DimensionType.ENTITY)
                    {
                    	 strCrossDim= strCrossDim + "\"OEP_All "+ dim.getName()+"\"->"
						 CustomRelDimensions.add('''@Relative("OEP_Total '''+dim.getName()+'''",0)''');				 	
					 	 EntityDim=dim.getName();
                    }
                    if (dType==DimensionType.ACCOUNT)
                    {
                     if (dim.hasMember("OQP_Units",qtp)==true)
                     	{
                     		isUnitsModel=true;
                     	}
                    }
				}
                
				StringBuilder cscript = new StringBuilder();
				cscript.append('''SET AGGMISSG ON;\n''');
				cscript.append('''SET UPDATECALC OFF;\n''');
                /*Main fix*/
				cscript.append('''FIX(@Relative("YearTotal",0)''');
                if (isCurrencyApp==true)
                {
					cscript.append(''',&amp;OEP_Currency''');		
                }
				cscript.append(''')\n''');
                /*Copies data across scnearios*/
				cscript.append('''	FIX(''')
				cscript.append(CustomRelDimensions.join(''','''));
				cscript.append(''')\n''');
                if (isUnitsModel==true)
                {
					cscript.append('''		Datacopy &amp;OEP_PriorYr->"OQP_Units"->"OEP_Working"->&amp;OEP_ActScenario to &amp;OEP_CurYr->"OQP_Last Year Units"->"'''+Version+'''"->"'''+Scenario+'''";\n ''')
					cscript.append('''		Datacopy &amp;OEP_PriorYr->"OQP_Impacted Units"->"OEP_Working"->&amp;OEP_ActScenario to &amp;OEP_CurYr->"OQP_Last Year Impacted Units"->"'''+Version+'''"->"'''+Scenario+'''";\n ''')					
                }
                else
                {
					cscript.append('''		Datacopy &amp;OEP_PriorYr->"OQP_Revenue"->"OEP_Working"->&amp;OEP_ActScenario to &amp;OEP_CurYr->"OQP_Last Year Revenue"->"'''+Version+'''"->"'''+Scenario+'''";\n ''')
					cscript.append('''		Datacopy &amp;OEP_PriorYr->"OQP_Impacted Revenue"->"OEP_Working"->&amp;OEP_ActScenario to &amp;OEP_CurYr->"OQP_Last Year Impacted Revenue"->"'''+Version+'''"->"'''+Scenario+'''";\n ''')					
                }
                /*Calculates Metrics*/
                cscript.append('''		FIX(&amp;OEP_CurYr,"'''+Scenario+'''","'''+Version+'''")\n''')
                cscript.append('''		"OQP_Number of Reps";\n''') 
                cscript.append('''		"OQP_Number of Accounts";\n''')                              
                cscript.append('''		ENDFIX\n''')
				cscript.append('''	ENDFIX\n''')
                /*Aggregates Actuals, Plan Scenarios */
				 if (HistoricalYears.size()>0)
                {
					cscript.append('''	FIX(&amp;OEP_PriorYr,"'''+Version+'''",&amp;OEP_ActScenario,'''+HistoricalYears.join(''',''')+''')\n''')
                }
                else
                {
               		cscript.append('''	FIX(&amp;OEP_PriorYr,"'''+Version+'''",&amp;OEP_ActScenario)\n''')
                }
				cscript.append('''		FIX(&amp;OEP_CurYr,"BegBalance","'''+Scenario+'''","OQP_Number of Reps","OQP_Number of Accounts",''')
                 if (isUnitsModel==true)
                {
                cscript.append('''@Relative("OQP_Unit Measures",0))\n''')
                }
                else
                {
                cscript.append('''@Relative("OQP_Revenue Measures",0))\n''')
                
                }				
                if (CustomDimensions.size()>0)
                {
					/*CustomDimensions.addAll(0,''''''+EntityDim+'''''')*/
                    cscript.append('''		FIX(@Relative("'''+EntityDim+'''",0) )\n''')
                    
                      for (iCnt=0;iCnt&lt;CustomDimensions.size()-1;iCnt++)
                	{
                		cscript.append('''			FIX(@RELATIVE("'''+CustomDimensions[iCnt]+'''",0))\n''')              
                	}                
                	for (iCnt=CustomDimensions.size()-1;iCnt>0;iCnt--)
                	{
                		cscript.append('''				AGG("'''+CustomDimensions[iCnt]+'''");\n''')                        
                		cscript.append('''			ENDFIX\n''')
                	}
                		cscript.append('''			AGG("'''+CustomDimensions[0]+'''");\n''')
                	cscript.append('''		ENDFIX\n''') 
                    cscript.append('''		FIX(@ICHILDREN("OEP_Total ''')
					cscript.append(CustomDimensions.join('''"),@ICHILDREN("OEP_Total '''))
                    cscript.append('''"),@Relative("OEP_Total ''');
                    cscript.append(CustomDimensions.join('''",0),@Relative("OEP_Total '''))
               		cscript.append('''",0))\n''');
                    cscript.append('''			AGG("'''+EntityDim+'''");\n''')
                    cscript.append('''		ENDFIX\n''') 
                    
                }
                else
                {
                	cscript.append('''			AGG("'''+EntityDim+'''");\n''');
                }          
				
				cscript.append('''		ENDFIX\n''')
                /*Calculates Seasonality percentages*/
                if (CustomDimensions.size()>0)
                {
                cscript.append('''		FIX("OEP_Any ''')
				cscript.append(CustomDimensions.join('''","OEP_Any '''))
               	cscript.append('''")\n''');
                }
                cscript.append('''			"OEP_Any '''+EntityDim+'''"=@CREATEBLOCK(&amp;OEP_PriorYr);\n''')
				cscript.append('''			FIX("OEP_Any '''+EntityDim+'''")\n''')
                cscript.append('''				"OQP_Seasonality%"(\n''')                
                if (isUnitsModel==true)
                {
                	cscript.append('''				"OQP_Seasonality%"='''+strCrossDim+'''"OEP_Working"->"OQP_Units"/'''+strCrossDim+'''"OQP_Units"->"OEP_Working"->"YearTotal";\n''')
                }
                else
                {
					cscript.append('''				"OQP_Seasonality%"='''+strCrossDim+'''"OEP_Working"->"OQP_Revenue"/'''+strCrossDim+'''"OQP_Revenue"->"OEP_Working"->"YearTotal";\n''')
                }
					cscript.append('''			)\n''');
				
                cscript.append('''			ENDFIX\n''')
                if (CustomDimensions.size()>0)
                {
					cscript.append('''		ENDFIX\n''')
                }
                cscript.append('''	ENDFIX\n''')
                cscript.append('''ENDFIX\n''')
				println(cscript.toString());
				return cscript.toString();
				}catch(all) {
					throw new HspRuntimeException('Error occured while executing business rule');
				}	
		
		</script></rule></rules><components/><deployobjects><deployobject product="2" application="salespln" plantype="oep_qtp" obj_id="1" obj_type="1" name="OQP_PROCESS DATA LOAD"/></deployobjects></HBRRepo>